home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine CD 1995 / Archive Magazine CD 1995.iso / discs / shareware / share_41 / assembler / examples / sum3 < prev    next >
Text File  |  1991-05-15  |  2KB  |  58 lines

  1. ; NAME       sum3
  2. ; PURPOSE    sums the numbers 0 to number1
  3. ; DESIGN  
  4. ;            result <- 0
  5. ;            load number1
  6. ;            for  number1 <- number1 downto 0
  7. ;              add number1 to result
  8. ;            end for
  9. ;            store result in number3
  10. ; NOTE
  11. ;            this differs from sum2 by unwinding the loop reducing the branching
  12. ;            this means the pipeline is flushed less ofen
  13. ;            works for number1 is multiple of 10 only
  14. ;            sum to 50000 is maximum without overflow
  15. ;            on arm 2 this takes 0.025 seconds
  16.  
  17.  
  18.  
  19.  
  20. ldr r7, [r1]            ; load number 1 to r7
  21. mov r8, #0              ; set result r8 to zero
  22. .loop     
  23.   add r8, r8, r7        ; add number to result
  24.   subs r7, r7, #1       ; decrement the number and set the flags
  25.  
  26.   add r8, r8, r7        ; add number to result
  27.   subs r7, r7, #1       ; decrement the number and set the flags
  28.  
  29.   add r8, r8, r7        ; add number to result
  30.   subs r7, r7, #1       ; decrement the number and set the flags
  31.  
  32.   add r8, r8, r7        ; add number to result
  33.   subs r7, r7, #1       ; decrement the number and set the flags
  34.  
  35.   add r8, r8, r7        ; add number to result
  36.   subs r7, r7, #1       ; decrement the number and set the flags
  37.  
  38.   add r8, r8, r7        ; add number to result
  39.   subs r7, r7, #1       ; decrement the number and set the flags
  40.  
  41.   add r8, r8, r7        ; add number to result
  42.   subs r7, r7, #1       ; decrement the number and set the flags
  43.  
  44.   add r8, r8, r7        ; add number to result
  45.   subs r7, r7, #1       ; decrement the number and set the flags
  46.  
  47.   add r8, r8, r7        ; add number to result
  48.   subs r7, r7, #1       ; decrement the number and set the flags
  49.  
  50.   add r8, r8, r7        ; add number to result
  51.   subs r7, r7, #1       ; decrement the number and set the flags
  52. bgt loop                ; branch if its greater than zero back round the loop
  53. str r8, [r3]            ; store the result in number 3
  54.  
  55. ; this reduces the branching, decreasing the pipeline flushing
  56. ; summing 10 000 000 takes around 5 seconds using arm2
  57. ; this is 50% speed improvement but only works for multiples of 10
  58.